home *** CD-ROM | disk | FTP | other *** search
/ HPAVC / HPAVC CD-ROM.iso / ICE95.ZIP / README.1ST < prev    next >
Text File  |  1995-10-10  |  40KB  |  978 lines

  1. ----------------------------------------------------------------------------
  2.      TABLE OF CONTENTS FOR Soft-ICE/W Version 1.95 Windows 95 Beta 
  3.  
  4.             Nu-Mega Technologies, Inc.
  5. ----------------------------------------------------------------------------
  6.  
  7.      1.  Overview and Installation    
  8.      2.  New in version 1.95
  9.      3.  Starting Soft-ICE/W
  10.      4.  Troubleshooting/Known problems    
  11.      5.  Source Level Debugging of 32 bit applications and DLL's
  12.      6.  Source level debugging of static and dynamic VxDs
  13.      7.  Address contexts
  14.      8.  32 bit symbols
  15.      9.  32 bit exports
  16.     10.  Setting Break Points on 32 bit source and symbols
  17.     11.     DBG2MAP utility    
  18.     12.  THREAD command    
  19.     13.  ADDR command
  20.     14.  32 bit heap support
  21.     15.  MAP32 command
  22.     16.  32 bit call stack    
  23.     17.  Step until Return function
  24.     18.     INT 41h DOT Commands
  25.     19.     VERBOSE keyword
  26.     20.  WLDR
  27.     21.  TASK command
  28.     22.  MOD command
  29.     23.     Displaying owner of an address for code and data window    
  30.     24.  Entering prefixes in command recall
  31.     25.  VxD Service Changes
  32.     26.  Positioning to beginning or end of a source file
  33.     27.  New Video Support
  34.     28.  VXD command
  35.     29.  Display transitions from Ring3 to Ring0 code.
  36.  
  37.  
  38. Overview and Installation
  39. -------------------------
  40.     Soft-ICE/W beta version 1.95 is intended for use with the final beta
  41.     version of Windows 95 (M8).
  42.  
  43.     This readme file is a supplement to the Soft-ICE/W documentation and
  44.     contains information on all the Windows 95 specific changes and other
  45.     changes that might not have made it into the written documentation.
  46.  
  47.     To install Soft-ICE/W run the setup.exe program from Windows 95.  This 
  48.     will prompt you for the necessary information and then unpack and copy
  49.     the files.
  50.  
  51.  
  52. New in version 1.95
  53. -------------------
  54.  
  55.     Soft-ICE/W version 1.95 is first major release since version 1.92.  Some
  56.     of the differences are listed below:
  57.  
  58.       - Full support for win95 address contexts.  This includes tying
  59.         breakpoints, exported symbols and symbol tables to specific address
  60.         contexts.  This also includes the ability to debug dll's
  61.         that exist in multiple contexts.
  62.       
  63.       - I/O breakpoints are now fully functional.
  64.       
  65.       - Fault trapping has been added for all page faults, gp faults, stack
  66.         faults and invalid opcode faults occurring in win32, win16 or v86
  67.         mode code.
  68.       
  69.       - Range breakpoints are functional for win32, win16 and v86 mode code.
  70.       
  71.       - Source level debugging support for vxd's built with the MSVC linker.
  72.       
  73.       - Support has been added for VMM and DEBUGCMD .M and .P debug commands.
  74.         This provides a wide variety of new informational displays concerning
  75.         paging, memory management, threads, mutexes and semaphores.
  76.       
  77.       - Many commands have been enhanced including VXD, HEAP32, TSS, ADDR,
  78.         CR, LDT and VCALL.
  79.       
  80.       - Disassembler now comments any transitions from application level code
  81.         to vxd code.  This includes both from V86 code and protected mode
  82.         code.
  83.       
  84.       - Numerous bug fixes.  Several of these bugs would result in seemingly
  85.         random hangs and crashes.  If win95 seemed less stable when running
  86.         under winice, theres a good chance this release will fix it.
  87.       
  88.       - All 32 bit exports are now displayed including exported entry points
  89.         that don't have symbol names.
  90.       
  91.  
  92. Starting Soft-ICE/W
  93. -------------------
  94.     Soft-ICE/W is a kernel debugger and must be loaded before win.com.
  95.     To run Soft-ICE/W, type winice at the command prompt.  Once
  96.     loaded, Soft-ICE/W executes win.com to start windows 95.
  97.  
  98.     By default, windows 95 boots directly into the GUI shell without stopping
  99.     at DOS.  There are several ways to change this behavior:
  100.  
  101.     1) While booting up, press F8, and when the win95 boot menu appears
  102.            select the option for "Command Prompt Only".  This would have to
  103.            be done each time the machine is booted.
  104.  
  105.     2) Place a PAUSE command at the end of autoexec.bat and press CTRL-C
  106.            when it pauses to escape to DOS.
  107.  
  108.         3) Create a dummy batch file called win.bat.  When windows 95 starts
  109.            it will exec in win.bat instead of win.com and you will end up
  110.            at the DOS prompt.
  111.  
  112.         4) Run winice from autoexec.bat.
  113.  
  114.     5) In Windows 95 the hidden file MSDOS.SYS is just an INI text file.  
  115.            After removing the hidden, read-only and system attributes, edit
  116.            the file and change the line BootGUI=1 to BootGUI=0.
  117.  
  118.  
  119. Troubleshooting/Known problems
  120. ------------------------------
  121.     This is a beta release of Soft-ICE/W and does contain some known problems.
  122.     This section lists those problems and potential work arounds where one
  123.     exists and also has some common trouble shooting items.    
  124.  
  125.       -    The class command lists only classes belonging to USER.
  126.  
  127.       - All forms of the BPR command will trap only level3 code.  VxD code
  128.         (level 0) will never be trapped.
  129.  
  130.       - Both the WLDR and WLOG programs are combined DOS/Windows programs.
  131.         In WIN95 the default behavior is to run windows programs from the
  132.         DOS command prompt.  This would result in the Windows portion of
  133.         the program being run.  For this reason, the files DLDR and DLOG are
  134.         included on this release which contain the DOS only portions of the
  135.         utilities.
  136.  
  137.  
  138. Source Level Debugging of 32 bit applications and DLL's
  139. -------------------------------------------------------
  140.     Version 1.95 32 bit source/symbol support works only with .SYM files.
  141.     It will not read debug information directly out of .EXE files.  
  142.     This means this release will not support local variables in 32 bit 
  143.     applications.  The procedure for debugging a 32 bit app/dll would be as
  144.     follows:
  145.  
  146.     - Build your applications and DLL's with full debug information
  147.  
  148.     - Run the provided DBG2MAP utility to produce a detailed map file.
  149.  
  150.     - Run the provided MSYM utility to produce a .SYM file.
  151.  
  152.     - Use WLDR to load source/symbols for your application and
  153.       to start your application.
  154.     
  155.  
  156. Source level debugging of static and dynamic VxDs
  157. -------------------------------------------------
  158.     Version 1.95 VxD source/symbol support works only with .SYM files.
  159.     It will not read debug information directly out of .VXD files.  
  160.     The procedure for debugging a static or dynamic VxD would be as follows:
  161.  
  162.         - Compile and assemble your source files with full debug info.
  163.           The following flags will work for MASM 6.11c and the MSVC C 
  164.           compiler.
  165.  
  166.       MASM:
  167.       -coff -DBLD_COFF -DIS_32 -W2 -Zd -c -Cx -DMASM6 -DDEBLEVEL=1 -DDEBUG
  168.  
  169.       C:
  170.       -Zdp -Gs -c -DIS_32 -Zl -DDEBLEVEL=1 -DDEBUG
  171.  
  172.     - Link with the MSVC linker producing a map with line number info.
  173.       The switches that must be added to the link are as follows:
  174.  
  175.         -DEBUG
  176.         -DEBUGTYPE:MAP,COFF
  177.         
  178.     - Run the provided MSYM utility to produce a .SYM file.
  179.  
  180.     - Use a LOAD= statement in WINICE.DAT, or the WLDR utility to load
  181.           source/symbols for your VxD.
  182.  
  183.     Note: Included in the M8 DDK are updated copies of MASM 6.11 and the MSVC
  184.           linker intended for VxD development.  The updated MASM is in 
  185.           directory MASM611C and the updated linker is in MSVC20.
  186.  
  187.     Soft-ICE/W also still supports the Windows 3.X development tools for
  188.     building VxDs, so if you are still using MASM 5.10B and LINK386 these
  189.     will still work.
  190.     
  191.  
  192. Address contexts
  193. ----------------
  194.     In Windows 95 every 32 bit application runs in a separate virtual address
  195.     space.  The linear address range 400000h to 7fffffffh is reserved for
  196.     32 bits apps and private DLL's.  When Windows 95 switches between 32 bit
  197.     tasks a new set of page tables are used for this address space.  
  198.  
  199.     When Soft-ICE/W pops up, it is in whatever context Windows 95 is currently
  200.     executing.  This can be determined by using the ADDR command.  Address
  201.     contexts can be changed explicitly by using the ADDR command.  This can
  202.     be confusing if you are viewing code or data that is located in
  203.     the 400000h to 7fffffffh range.  When you switch address contexts the 
  204.     data or code being displayed will change even though the selector:offset
  205.     address does not change.
  206.  
  207.     Soft-ICE/W will also automatically switch address contexts in the
  208.     following situations:
  209.  
  210.     If the TABLE command is used to switch to a 32 bit symbol table
  211.     the current address context will be set to that modules address
  212.     context.               
  213.  
  214.     If the FILE command is used to display a source file from a 32 bit
  215.     table the current address context will be set to that modules address
  216.     context.               
  217.  
  218.     If a symbol-name is used in an expression, the address context will
  219.     be changed to the appropriate context.  This is true for both
  220.     symbols and export symbols loaded through the EXP directive.
  221.  
  222.     If you are using bare addresses in an expression you must make sure you
  223.     are in the desired address context.  
  224.  
  225.     ie.  D 137:401000  will display memory at 401000 in the current
  226.     address context.  
  227.  
  228.     WARNING: Before setting breakpoints using bare addresses make sure you
  229.          are in the desired address context since Soft-ICE/W will use
  230.          the current context.    
  231.  
  232.     Once a break point is set Soft-ICE/W will remember the address context
  233.     it was set in and will ensure that it only goes off in the correct
  234.     address context.
  235.  
  236.  
  237. 32 bit symbols
  238. --------------
  239.     Support has been added for 32 bit .SYM files.  Soft-ICE/W can handle
  240.     .SYM files produced by the Microsoft MAPSYM utilities or ones produced
  241.     by our own MSYM utility.  For source level debugging you must use
  242.     our DBG2MAP utility followed by our MSYM utility.
  243.  
  244.     .SYM files can be loaded in two different ways:
  245.  
  246.     Preloaded from WINICE.DAT.
  247.  
  248.         Use the LOAD32 keyword specifying either the executable file name
  249.         or the .SYM file name.  For example:
  250.  
  251.             LOAD32=c:\windows\system\kernel32.dll
  252.  
  253.             OR
  254.  
  255.             LOAD32=c:\windows\system\kernel32.sym
  256.  
  257.  
  258.     Loaded from the WLDR utility.
  259.  
  260.         Run WLDR from Windows and specify the executable file name.
  261.         
  262.  
  263.     Symbols are displayed in Soft-ICE/W using the SYM command.  If the module
  264.     is not yet loaded, the segment displayed will be the section number from
  265.     the 32 bit executable file. (i.e. 1,2,3 etc.).  The offset will be the    
  266.     offset from the section base.  Once the module is loaded into memory
  267.     a selector:offset will be displayed where the offset now contains the
  268.     section base address added in.  When a 32 bit module is unloaded, all 
  269.     addresses will return to the section number:offset address.        
  270.  
  271.  
  272. 32 bit exports
  273. --------------
  274.     Support has been added for 32 bit exported symbols.  Use the EXP directive
  275.     in WINICE.DAT to load 32 bit export symbols for any 32 bit DLL.  The EXP
  276.     command lists all exported symbols that WINICE knows about.    These 
  277.     symbols can be used in any WINICE expression and are automatically
  278.     displayed when disassembling code.
  279.  
  280.     The winice.dat file contains sample exp lines for Windows 95 that are
  281.     commented out.  Just change the directory names to wherever your Windows
  282.     95 is installed and remove the ; preceding the exp statement.
  283.  
  284.     When displaying exports in Soft-ICE/W, if the module is not yet loaded,
  285.     the segment will be displayed as FE: and the offset will be the offset
  286.     from the 32 bit image base.  Once the module is loaded into memory
  287.     a selector:offset will be displayed where the offset now contains the
  288.     image base address added in.  When a 32 bit module is unloaded, all 
  289.     addresses will return to the FE:offset address.
  290.  
  291.     Soft-ICE/W will show all exported entry points even if they do not have
  292.     names associated with them.  For exported entry points without names,
  293.     Soft-ICE/W will form a name in the following format:
  294.  
  295.     ORD_XXXX where XXXX is the ordinal number.        
  296.  
  297.     Since multiple DLL's can have unnamed ordinals, there can be an overlap
  298.     of names of this form.  To be sure you are using the correct symbol you
  299.     can precede the symbol with the module name followed by exclamation 
  300.     point.  For example to refer to KERNEL32's export ordinal number 1, the
  301.     following expression could be used:
  302.  
  303.     kernel32!ord_0001
  304.  
  305.     The number following the ord_ string does not have to have the correct
  306.     number of leading zeroes.  ord_0001 and ord_1 will both work correctly.
  307.  
  308.     For Windows 95, Soft-ICE/W will search all 32 bit export tables before
  309.     any 16 bit export tables.  If the same name exists in each type of table
  310.     Soft-ICE/W will use the 32 bit one.  If you need to override this
  311.     behavior, precede the export symbol with the module name followed by an
  312.     exclamation point.  For example, if specifying the symbol GlobalAlloc,
  313.     Soft-ICE/W would use kernel32!GlobalAlloc rather than kernel!GlobalAlloc.
  314.  
  315.  
  316. Setting Break Points on 32 bit Source and Symbols
  317. -------------------------------------------------
  318.     Break points can be set on any symbol or source line regardless of
  319.     whether the module is loaded or the underlying code or data is actually
  320.     present in memory.  If the code or data is not currently available the
  321.     break point will remain in an unarmed state.  When Soft-ICE/W detects
  322.     the module being loaded or the page becoming present the break point
  323.     is automatically armed.
  324.  
  325.     All BPX and BPM style break points are "permanent"  break points.  That
  326.     is no matter how many times the code/data is paged in and out or how
  327.     many times the module is loaded and unloaded the break points will 
  328.     remain active.  Soft-ICE/W will automatically update the state and
  329.     address of these break points.   
  330.     
  331.  
  332. DBG2MAP utility
  333. ---------------
  334.     DBG2MAP is a command line utility that accepts a Win32 (PE)
  335.     executable file with debug information as input, and emits a .MAP
  336.     file.  This .MAP file can then be run through Nu-Mega's MSYM program
  337.     to create a .SYM file for use by Soft-Ice/W.  At the present time,
  338.     .SYM files are the only way for Soft-Ice/W to load 32 bit symbol tables.
  339.  
  340.     DBG2MAP works on executables produced with Microsoft Visual C++ 32 bit
  341.     Edition, Borland C++ 4.0, and the Microsoft Win32 SDK compiler.  The
  342.     .SYM files generated by DBG2MAP/MSYM can be loaded into Soft-Ice/W
  343.     via a LOAD32= statement in the WINICE.DAT file, or by the WLDR
  344.     program.  When using WLDR to load the symbols, specify the name of
  345.     the EXE or DLL, not the .SYM file name.
  346.  
  347.     Using DBG2MAP
  348.     -------------
  349.         The syntax for DBG2MAP can be seen by running DBG2MAP.EXE from a
  350.     command prompt without any arguments:
  351.  
  352.     ********
  353.     DBG2MAP - Win32 debug info to .MAP file program
  354.     (C) Copyright Nu-Mega Technologies 1994, All rights reserved.
  355.  
  356.     Syntax: DBG2MAP [switches] filename
  357.         /A   Include arguments in C++ functions names (default: no)
  358.         /M   Run MSYM to create a .SYM file from the .MAP file
  359.         /P<filename>  Use PELE .SMF file
  360.     ********
  361.  
  362.     To create a .MAP file, type "DBG2MAP filename", where "filename" is
  363.     the name of your Win32 EXE or DLL that contains debugging
  364.     information.  After DBG2MAP finishes, there will be a .MAP file in
  365.     the current directory with the same base filename as your EXE or DLL.
  366.  
  367.     The "/A" option tells DBG2MAP to leave in the arguments from the
  368.     function names of Microsoft C++ programs.  By default, DBG2MAP
  369.     truncates Microsoft C++ function names starting with the '('
  370.     character.  If you instruct DBG2MAP to leave in the arguments in the
  371.     symbol names, the symbols may be long and difficult to type in
  372.     correctly.
  373.  
  374.     The "/M" option tells DBG2MAP to automatically invoke MSYM after the
  375.         map file is created.
  376.  
  377.         The "/P" option is used to support Vireo's VtoolsD package.  VtoolsD
  378.         has a utility to convert PE header files to LE header files.
  379.  
  380.     Using DBG2MAP In Your Build Process
  381.     -----------------------------------
  382.     DBG2MAP is a console mode Win32 program.  If run under a version of
  383.     Win32 that supports console mode applications, it will run natively.
  384.     Otherwise, it uses a bound in version of Phar-Lap's TNT DOS Extender.
  385.  
  386.     When building with the command line tools, you may experience
  387.     problems in both the Microsoft and Borland environments.  For Borland
  388.     users, Phar-Lap says that Borland's MAKE.EXE is incompatible with
  389.     other DPMI tools such as the TNT DOS extender.  Phar Lap recommends
  390.     using the real mode MAKER.EXE program instead of the protected mode
  391.     MAKE.EXE.
  392.  
  393.     Microsoft users may have problems when running DBG2MAP from within an
  394.     NMAKE makefile.  This is due to memory conflicts between the DBG2MAP
  395.     version of the TNT DOS Extender, and the older Phar Lap DOS extender
  396.     used in the Microsoft tools (CL.EXE and LINK.EXE).  To work around
  397.     this, we suggest running DBG2MAP from a batch file.  For instance:
  398.  
  399.     File: M.BAT
  400.     ----
  401.     NMAKE   YOURAPP.MAK
  402.     DBG2MAP YOURAPP.EXE
  403.     MSYM    YOURAPP.MAP
  404.     ----
  405.  
  406.     DBG2MAP Limits
  407.     --------------
  408.     Due to constraints in the .SYM file format, type information and
  409.     local variables are not supported.  Only PUBLIC symbols will be put
  410.     into the .SYM file.  The included information will only contain symbol
  411.     names and the symbol's associated address.
  412.  
  413.  
  414. THREAD command
  415. --------------
  416.     The THREAD command has been added to display all threads currently
  417.     running.  The top line of the display is the current thread.  The syntax
  418.     is as follows:
  419.  
  420.     THREAD [task-name | TCB | ID]
  421.    
  422.     If the optional task-name is specified, only threads belonging to the 
  423.     task will be displayed.  If the TCB or ID is specified only information
  424.     about the one specific thread will be displayed.  For each thread the
  425.     following information is dislayed:    
  426.  
  427.     RING0TCB - This is the address of the ring 0 thread control block.
  428.             This is the address that is passed to VxDs for thread
  429.            creation and thread termination.
  430.  
  431.     ID     - This is the word ID number of the thread.
  432.  
  433.     CONTEXT  - This is the context handle for the thread that determines
  434.            what address space is used for the thread.
  435.  
  436.     RING3TCB - This is the address of the ring 3 thread control block.
  437.            This is the one that would be used by applications.
  438.  
  439.     PROCESS  - This is the address of the process block that owns the
  440.            thread.    
  441.  
  442.     TASKDB   - This is the selector of the task database that owns the
  443.            thread.
  444.  
  445.     PDB      - This the selector of the program database (protected mode
  446.            PSP).
  447.  
  448.     SZ     - This is the size of the thread either 16 or 32 bit.
  449.  
  450.     OWNER     - This is the task name of the owner.  For 32 bit tasks,
  451.            the module name with the extension stripped off is
  452.            displayed.
  453.  
  454.    An asterisk '*' displayed in front of the owner name indicates that the
  455.    thread is the current thread for the task.
  456.  
  457.    If a TCB or ID is specified the following information is displayed for
  458.    that one specific thread:
  459.     
  460.     The current register contents for the thread
  461.  
  462.     All thread local storage offsets within the thread.  This shows
  463.         the offset in the thread control block of the local storage entry,
  464.         the contents of the TLS entry and the owner of the TLS entry.
  465.  
  466.  
  467. ADDR command
  468. ------------
  469.     The ADDR command has been added to both display and switch to specific
  470.     address contexts.  Each 32 bit task is currently given the address space
  471.     from 400000h to 7fffffffh.  This is called an address context.  The
  472.     syntax of the ADDR command is as follows:
  473.  
  474.     ADDR [context-handle | task-name]
  475.  
  476.     If no parameters are specified information will be displayed for each
  477.     address context.  The top line of the display is the context that was
  478.     active when Soft-ICE/W popped up.  The line that is highlit is the
  479.     current address context in Soft-ICE/W. 
  480.     For each address context, the following information is displayed.
  481.  
  482.     HANDLE     - This is the address of the context control block.  This
  483.            is the handle that would be passed in VxD calls that
  484.            require a context handle.
  485.  
  486.     PGTPTR     - This is the address of an array of page table addresses. 
  487.            Each entry in the array represents a 4 meg page table.
  488.            When address contexts are switched this array is copied
  489.            to the appropriate spot in the page directory. 
  490.  
  491.     TABLES   - This is the number of entries in the PGTPTR array.  Not all
  492.            entries contain valid page directory entries.  This is 
  493.               only the number of entries reserved.
  494.  
  495.     MINADDR     - This is the minimum virtual address of the address context.
  496.  
  497.     MAXADDR  - This is the maximum virtual address of the address context.
  498.  
  499.     MUTEX    - This is the mutex handle used when VMM manipulates the 
  500.                    page tables for the context.
  501.  
  502.     OWNER    - This is the task name of the first task that uses
  503.            this address context.
  504.  
  505.     If a context-handle or task-name are entered, WINICE will switch to that
  506.     address context.  The proper address context will be restored before
  507.     WINICE continues.
  508.  
  509.     Sample output is provided below for ADDR with no parameters.
  510.  
  511.         Handle    PGTPTR    Tables  Min Addr  Max Addr  Mutex     Owner
  512.         C103FC84  C1058D3C  0003    00400000  7FFFF000  C104E15C  KERNEL32
  513.         C10594AC  C105A6E4  01FD    00400000  7FFFF000  C10597F8  MSGSRV32
  514.         C105BF80  C10624B8  01FE    00400000  7FFFF000  C105CAC0  Explorer
  515.         C105F5D0  C1062CB4  01FB    00400000  7FFFF000  C0FE57A4  WINOLDAP
  516.         C105E588  C10608C8  01FB    00400000  7FFFF000  C105F15C  Systray
  517.         C105DABC  C105FC68  01FD    00400000  7FFFF000  C105DB8C  MMTASK
  518.         C105A3DC  C105B3A8  01FD    00400000  7FFFF000  C105A410  Mprexe
  519.         C10D9030  C10D9048  0002    00400000  7FFFF000  C10D9074
  520.  
  521.  
  522. 32 bit heap support
  523. -------------------
  524.     Support has been added in the HEAP command for 32 bit heaps.  This
  525.     includes both ring3 heaps and ring0 heaps.  The syntax for 32 bit heaps
  526.     is as follows:
  527.  
  528.     HEAP 32 [task-name | heap-base]
  529.  
  530.     If no parameters are specified, all 32 bit heaps that can be found will
  531.     be displayed.  The following heaps will be displayed:
  532.  
  533.     Kernel32's system heap.  
  534.  
  535.     Each process's private heaps.  These are the heaps created by the
  536.     HeapCreate call.
  537.  
  538.     The two ring 0 heaps created by VMM.  The first heap shown is the
  539.         locked heap.  The second heap shown is the pageable heap.
  540.  
  541.     One ring0 heap for every existing virtual machine.
  542.  
  543.  
  544.     For each 32 bit heap the following information will be displayed:
  545.  
  546.     The heap base address.
  547.  
  548.     The maximum size that the heap can grow too.
  549.  
  550.     The current committed memory in the heap.  This reflects the number
  551.         of pages that are actually present in memory.
  552.  
  553.     The number of segments in the heap.  Each time the heap grows past
  554.         its initial max length a new heap segment is created.
  555.  
  556.         The heap type.
  557.  
  558.     The owner of the heap.
  559.  
  560.     If a task-name is provided, WINICE will display the entire process heap
  561.     for that task.  The address context will automatically be changed to the
  562.     correct one.  
  563.  
  564.     If an actual heap base address is given that entire heap will be
  565.     displayed.  If the heap is in private address space, you must make sure
  566.     you are in the right address context for that heap.
  567.  
  568.     When displaying an individual 32 bit heap the following information is
  569.     displayed:
  570.  
  571.         The address of each heap element.
  572.  
  573.     The size in bytes of each element.
  574.  
  575.     The thread-id of the allocating thread
  576.  
  577.     The EIP address of the code that allocated the element.
  578.  
  579.     The nearest symbol to the EIP address.
  580.  
  581.     The last three pieces of information are only available in the debug
  582.     versions of Windows 95.  For ring3 heaps this means the SDK debug versions,
  583.     for ring0 heaps this means the DDK debug version of VMM.
  584.  
  585.     Sample output is provided below for HEAP32 with no parameters.
  586.  
  587.         HeapBase  Max Size  Committed  Segments  Type      Owner
  588.         00410000     1028K         8K         1  Private   Systray
  589.         00440000     1028K        40K         1  Private   Explorer
  590.         00510000     1028K         8K         1  Private   Mprexe
  591.         00400000     1024K         8K         1  Private   MMTASK
  592.         00400000     1024K         8K         1  Private   MSGSRV32
  593.         00410000     1024K         8K         1  Private   WINOLDAP
  594.         81579000     1024K        64K         1  System    KERNEL32
  595.         00880000     1024K         8K         1  Private   KERNEL32
  596.         C0FDA000     1024K       560K         1  Ring 0    VMM
  597.         C10DA000     5120K       940K         2  Ring 0    VMM
  598.         C3520000      512K        20K         1  VM 01     VMM
  599.         C5920000      512K        20K         1  VM 02     VMM
  600.  
  601.  
  602. MAP32 command
  603. -------------
  604.     MAP32 provides a memory map of all 32 bit modules currently loaded in
  605.     memory.  Its syntax is as follows:
  606.  
  607.     MAP32 [module-name | module-handle]
  608.  
  609.     MAP32 with no parameters displays a map of all 32 bit modules.  If either
  610.     a module-name or module-handle is specified only sections from that one
  611.     module will be displayed.  For each module one line is displayed for
  612.     every section/object owned by that module.  Each line contains the
  613.     following information:
  614.  
  615.     Owner    This is the module name
  616.  
  617.         Name    This is the section/object name from the executable file.
  618.  
  619.     Obj#    This is the section/object number from the executable file.
  620.  
  621.     Address    This is the selector:offset address of the object/section.
  622.  
  623.     Size    This is the memory size in bytes.
  624.  
  625.     Type    This is the type and attributes of the object/section
  626.             CODE    code
  627.             IDATA   Initialized data
  628.             UDATA   uninitialized data
  629.             RO        read only
  630.             RW      read/write
  631.             SHARED  Object is shared
  632.  
  633.     Sample output is provided below for MAP32 on a single module:
  634.  
  635.     MAP32 MSVCRT10
  636.  
  637.     Owner     Obj Name  Obj#  Address        Size      Type
  638.     MSVCRT10  .text     0001  2197:86C81000  00024A00  CODE  RO
  639.     MSVCRT10  .bss      0002  219F:86CA6000  00001A00  UDATA RW
  640.         MSVCRT10  .rdata    0003  219F:86CA8000  00000200  IDATA RO
  641.     MSVCRT10  .edata    0004  219F:86CA9000  00005C00  IDATA RO
  642.     MSVCRT10  .data     0005  219F:86CAF000  00006A00  IDATA RW
  643.     MSVCRT10  .idata    0006  219F:86CB6000  00000A00  IDATA RW
  644.     MSVCRT10  .reloc    0007  219F:86CB7000  00001800  IDATA RO
  645.  
  646.  
  647. 32 bit call stack
  648. -----------------
  649.     The STACK command has been changed to work in 32 bit code.  Since 32 bit
  650.     support is limited to .SYM files, local variables will not be displayed
  651.     in the call stack.  The stack display is arranged like a real stack
  652.     where the topmost entry is the oldest one and the bottom most entry
  653.     is the newest one.  The bottom line will always be the current eip.
  654.  
  655.     For each line in the call stack both the nearest symbol to the address
  656.     and the actual address are displayed.  If there is no symbol available
  657.     the module name and object/section name are displayed instead.  A sample
  658.     call stack follows:
  659.  
  660.     KERNEL32!GetProcessFlags+179D at 0137:BFF887A6
  661.     KERNEL32!GetProcessFlags+128A at 0137:BFF88293
  662.     NOTE32!.text+48A3 at 0137:004058A3
  663.     NOTE32!.text+511B at 0137:0040611B
  664.     => KERNEL32!GetStdHandle+000C at 0137:BFF92604
  665.  
  666.     The 32 bit call stack support is not limited to applications.  It will
  667.     also work for VxD code at ring 0.  However, since most VxDs are written
  668.     in assembly language, many times there is not a valid call stack to walk.
  669.  
  670.     The call stack code will not trace through thunks or level changes.
  671.  
  672.  
  673. Step until Return function
  674. --------------------------
  675.     The P command has been modified to provide a step until return function.
  676.     This function will automatically step over code until the next return or
  677.     return from interrupt is encountered.  This function will work in either
  678.     16 or 32 bit code and will also work in VxD code.
  679.  
  680.     The syntax of the command is P RET.  To make the function easier to use
  681.     the default WINICE.DAT file assigns this command to the F12 function key.
  682.     Thus pressing F12 at any time will automatically step out of the current
  683.     procedure.  If you are in an unusually large procedure there can be a
  684.     noticeable delay since Soft-ICE/W is single stepping every instruction.
  685.   
  686.     
  687. INT 41h DOT Commands
  688. --------------------
  689.     Support has been added for the following int 41h dot commands.
  690.  
  691.     function 70h    register 32 bit dot command
  692.          72h    deregister dot command
  693.          73h    printf32
  694.          75h    get registers
  695.              76h    set registers
  696.          77h     get character from command line
  697.          78h    evaluate expression
  698.          79h    verify memory address
  699.          7ah    display registers
  700.          7bh    stack dump
  701.  
  702.     These functions are used by the dot command handlers embedded in various
  703.     pieces of windows 95.
  704.  
  705.     There are three types of dot commands present in windows 95 supported by
  706.     Soft-ICE/W:
  707.  
  708.       - registered dot command handlers.  These are new to windows 95.  To
  709.     get a list of registered dot commands type .?
  710.     Sample output of .? follows:
  711.  
  712.       .P - Dump scheduler data. Type '.P?' for more information.
  713.       .C - Dos Call trace information.
  714.       .M - dump memory manager structures.  Type '.M?' for more information.
  715.  
  716.        .P and .C are present only if DEBUGCMD.VXD is specified in system.ini.
  717.        DEBUGCMD.VXD is included in the win95 DDK.
  718.  
  719.        .M is provided by VMM and is present in both the retail and debug
  720.        builds.
  721.  
  722.      - VxD Debug_Query handlers.  These dot handlers are invoked by typing
  723.        a VxD name following the dot.  Most of these commands if implemented
  724.        will display a menu.  For example in win95(M8) the following VxDs 
  725.        have dot handlers in both the retail and debug versions:
  726.  
  727.          .VMM
  728.          .VPICD
  729.          .VXDLDR
  730.          .CONFIGMG
  731.  
  732.        The only way to know if a VxD has a dot handler is to try it.            
  733.        The dot handlers in the debug version of the ddk sometimes provide
  734.        more functionality than the ones in the retail version.
  735.  
  736.      - dot commands embedded in VMM.  To get a list of dot functions 
  737.        supported by VMM type ..?  In the M8 retail build ..? yielded the
  738.        following:
  739.  
  740.          .R [#] ------- Displays the registers of the current thread
  741.          .VM [#] ------ Displays complete VM status
  742.          .VC [#] ------ Displays the current VMs control block
  743.          .VH [#] ------ Displays a VMM linked list, given list handle
  744.          .VR [#] ------ Displays the registers of the current VM
  745.          .VS [#] ------ Displays the current VM's virtual mode stack
  746.          .VL ---------- Displays a list of all valid VM handles
  747.          .DS ---------- Dumps protected mode stack with labels
  748.          .VMM --------- Menu VMM state information
  749.          .<dev_name> -- Display device specific info
  750.  
  751.     NOTE: All of the above debug functionality is built into the system code
  752.           itself and is not a part of Soft-ICE/W, and therefore all of the
  753.           functions cannot be guaranteed to work.  Some of the code does 
  754.           not do error checking and can crash if passed bad input.
  755.  
  756.  
  757. VERBOSE keyword
  758. ---------------
  759.     When the VERBOSE keyword is placed on a line in the WINICE.DAT file
  760.     WINICE will display debugging messages when the following events occur.
  761.  
  762.     16 bit segment loads and segment frees
  763.     32 bit segment loads and segment frees
  764.     Module deleted
  765.     DLL starting
  766.     ALL VxD messages
  767.     LOGERROR messages
  768.  
  769. WLDR
  770. ----
  771.     The program and symbol loader WLDR.EXE has been updated to allow loading
  772.     of .SYM files.  Just specify the name of a 32 bit application or DLL and
  773.     click the load button.  If you are loading DLL symbols check the symbols
  774.     only check box, otherwise WLDR will actually load your DLL into memory
  775.     which you probably don't want.
  776.  
  777.     When your loading an application WLDR will automatically stop on the
  778.     starting CS:EIP.  If source code is available it will be displayed and
  779.     stepping once will stop at WinMain.
  780.   
  781.     NOTE: At the point the breakpoint goes off the start cs:eip is not
  782.               yet present in memory.  So if you are viewing the code in 
  783.             assembly mode you will see nothing but INVALID's.  Single
  784.           stepping once will page the code into memory.        
  785.  
  786.     The .SYM file support is not limited to applications and DLL's.  In 
  787.     addition you can now load VxD symbol tables using WLDR.  This will work
  788.     with either MAPSYM or MSYM .SYM files.  If the VxD you specify is a
  789.     dynamic VxD, WLDR will attempt to load it into memory.  If you do not
  790.     want it loaded by WLDR make sure you check the symbols only box.
  791.  
  792.  
  793. TASK command
  794. ------------
  795.     The task command has been modified to show the 32 bit tasks that are 
  796.     running.  For 32 bit tasks the following fields are different:
  797.  
  798.     The StackBottom field will contain the highest legal address of the
  799.         stack shown as a 32 bit flat offset.
  800.  
  801.     The StackTop field will contain the lowest legal address of the
  802.         stack shown as a 32 bit flat offset.
  803.  
  804.     The StackLow field is not used.
  805.  
  806.  
  807. MOD command
  808. -----------
  809.     The MOD command has been modified to display all 32 bit modules that are
  810.     loaded.  All 32 bit modules will be grouped together and will always
  811.     follow the 16 bit modules.  All fields are the same with the exception
  812.     that the 32 bit modules will also display the offset of the PE File
  813.     header for that module.  To examine the PE header's you must use the
  814.     Ring3 flat data selector.
  815.  
  816.     The MOD command has also been modified to accept prefixes on the command
  817.     line so that it will only display modules that begin with that prefix.
  818.     
  819.  
  820. Displaying owner of an address for code and data window
  821. -------------------------------------------------------
  822.     Soft-ICE/W always attempts to display the owner of memory shown in both
  823.     the code and the data window.  If there is a symbol or export available
  824.     Soft-ICE/W will show the name plus an offset for the owner name.
  825.  
  826.     If there is not a symbol or export available and you are displaying 32
  827.     bit code or data, Soft-ICE/W will show you the module name followed
  828.     by the section object name followed by an offset.  For example the
  829.     string displayed under the code window might be something like the 
  830.     following:
  831.  
  832.         MSVCRT10!.text+1B7
  833.  
  834.  
  835. Entering prefixes in command recall
  836. -----------------------------------
  837.     Command recall has been modified in Soft-ICE/W to allow prefixes to be
  838.     entered.  For example typing a U and then pressing the up or down arrow
  839.     keys will recall only commands that start with a U.  This feature only
  840.     works if the cursor is in the command window.
  841.  
  842.  
  843. VxD Service Changes
  844. -------------------
  845.     The VCALL and VxD commands have been updated to show service names from 
  846.     every VxD include file provided in the Windows 95 DDK.  In addition when
  847.     disassembling VxD code, Soft-ICE/W will now show VxD service names as
  848.     code labels where appropriate.
  849.  
  850.  
  851. Positioning to beginning or end of a source file
  852. ------------------------------------------------
  853.     If source code is displayed in the code Window, pressing CTRL-HOME will
  854.     jump to line 1 and pressing CTRL-END will jump to the last line in the
  855.     file.
  856.  
  857.  
  858. New Video Support
  859. -----------------
  860.     This release of Soft-ICE/W contains a new video VxD that can be used for
  861.     single monitor debugging.  This driver should work with the following
  862.     video boards regardless of whether you are using proprietary video
  863.     drivers or the generic Windows video drivers.  To select this driver
  864.     run the Soft-ICE/W setup.exe program and select the Generic SuperVGA 
  865.     driver.
  866.  
  867.     ATI 18800,28800 rev1-6,38800(Mach8),68800(Mach32)
  868.          ATI EGA Wonder+        18800
  869.          ATI VGA Wonder
  870.          ATI VGA Edge
  871.          ATI VGA Edge-16
  872.          ATI VGA Wonder+        28800
  873.          ATI 8514-Ultra        38800(Mach8)
  874.          ATI Ultra
  875.          ATI Vantage
  876.          ATI Graphics Ultra
  877.          ATI Graphics Vantage
  878.          ATI Graphics Ultra Pro    68800(Mach32)
  879.          ATI Graphics Ultra+
  880.  
  881.     Cirrus Logic 610,620,6410,54xx
  882.  
  883.     Diamond Stealth 24        S3 911
  884.          Diamond Stealth 32      ET4000/W32p
  885.          Diamond Stealth Pro    S3 928
  886.          Diamond Stealth 64    S3 964
  887.          Diamond Viper VLB     ( older boards )
  888.  
  889.     Oak 037,067,077,087
  890.  
  891.     Paradise PVGA 1A,1C,1D,1F,WD90Cxx
  892.  
  893.     S3 911/924/928/801/805/864/964
  894.  
  895.     STB Lightspeed        ET4000/W32p
  896.  
  897.     Trident 8800,8900,9000,9200/9400(CXr & CXi)
  898.  
  899.     Tseng Labs ET3000,ET4000,ET4000/W32p
  900.  
  901.     Video7 V7VGA,HT208,HT209,HT216,HT216-32
  902.          Video7 VRAM        V7VGA
  903.          Video7 1024i        HT208
  904.          Video7 VRAM II        HT209
  905.  
  906.     Weitek 5186/Power 9000
  907.  
  908.  
  909. VXD command
  910. -----------
  911.     The following changes have been made to the VxD command.
  912.  
  913.       - All dynamically loaded VxDs are now displayed following the statically
  914.         loaded Vxds.
  915.  
  916.       - The entire win32 service table is displayed for a specified VxD.
  917.     For each service the following is shown:
  918.            Service number
  919.        Service address
  920.        Number of dword parameters the service requires
  921.  
  922.       - The total amount of memory occupied by the displayed VxDs is shown.
  923.         For example VXD VMM would show how much memory is occupied by VMM
  924.         while the VXD command with no parameters would show how much memory
  925.         is occupied by all VxDs.
  926.  
  927.       - For a specified VxD the following info is now shown:
  928.            Init Order
  929.        Reference data
  930.        Version number
  931.        PM API procedure address
  932.         PM API ring3 address used by application.
  933.        V86 API procedure address
  934.        V86 API ring3 address used by application
  935.  
  936.  
  937. Display transitions from Ring3 to Ring0 code
  938. --------------------------------------------
  939.     To transition from ring3 code to ring 0 code(VxD) Windows uses two 
  940.     different methods.
  941.  
  942.       For V86 code, windows uses the ARPL instruction which causes an invalid
  943.       opcode fault.  The invalid opcode handler then passes control to the
  944.       appropriate VxD.  The ARPL instruction is usually located in ROM.
  945.       Only one ARPL is used and the V86 segment:offset is varied to indicate
  946.       different VxD addresses.  For example if the ARPL was at FFFF:0
  947.       Windows would use the addresses FFFF:0, FFFE:10, FFFD:20, FFFC:30, etc.
  948.  
  949.       For PM code, windows uses interrupt 30h.  Segment 3bh contains nothing
  950.       but interrupt 30h's each of which is used to transfer control to a 
  951.       VxD.
  952.  
  953.     The Soft-ICE/W disassembler will now show the VxD address that will be
  954.     executed based on these instructions.
  955.  
  956.     Sample ouput follows for disassembling 3B:31A
  957.  
  958.     003B:031A   INT     30  ; #0028:C008D4F4  VPICD(01)+0A98
  959.     003B:031C   INT     30  ; #0028:C007F120  IOS(01)+0648
  960.     003B:031E   INT     30  ; #0028:C02C37FC  VMOUSE(03)+00F0
  961.     003B:0320   INT     30  ; #0028:C02C37FC  VMOUSE(03)+00F0
  962.     003B:0322   INT     30  ; #0028:C023B022  BIOSXLAT(05)+0022
  963.     003B:0324   INT     30  ; #0028:C0230F98  BIOSXLAT(04)+0008
  964.     003B:0326   INT     30  ; #0028:C023127C  BIOSXLAT(04)+02EC
  965.     003B:0328   INT     30  ; #0028:C009699B  BIOSXLAT(01)+000B
  966.     003B:032A   INT     30  ; #0028:C00AC5C7  VNETBIOS(01)+0DA3
  967.     003B:032C   INT     30  ; #0028:C00AC60C  VNETBIOS(01)+0DE8
  968.     003B:032E   INT     30  ; #0028:C02531D4  DOSMGR(13)+0190
  969.  
  970.     Sample ouput for disassembling an ARPL
  971.  
  972.     FDD2:220D   ARPL    DI,BP  ; #0028:C0078CC9  IFSMgr(01)+0511
  973.  
  974.     Many times when tracing into code you will arrive at either an int 30
  975.     or an ARPL.  At this point you can immediately G to the address shown
  976.     to save stepping through a large amount of VMM code.
  977.     
  978.